/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.inve.view.mbean;

import com.brain.core.view.mbean.*;

import com.brain.core.exception.DAOException;
import com.brain.core.manager.BitacoraManager;
import com.brain.core.manager.RecursosManager;
import com.brain.inve.dto.SistemaControlInveDetaDto;
import com.brain.inve.dto.SistemaControlInveDto;
import com.brain.inve.manager.SistemaControlInveDetaManager;
import com.brain.inve.manager.SistemaControlInveManager;

import java.io.Serializable;
import java.util.List;
import javax.annotation.Resource;
import javax.faces.model.SelectItem;
import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Indra
 */
@Controller("sistemaControlInveMBean")
@Scope("session")
public class SistemaControlInveMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(SistemaControlInveMBean.class);
    @Resource
    private SistemaControlInveManager manager;
    @Resource
    private BitacoraManager bitacoraManager;
    @Resource
    private SistemaControlInveDetaManager detaManager;
    @Resource
    private RecursosManager recursosManager; 
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;
    private List<SistemaControlInveDto> lista;
    private List<SistemaControlInveDetaDto> listaDetalles;
    private List<SistemaControlInveDetaDto> listaDetallesPopup;
    private SistemaControlInveDto dto;
    private SelectItem[] siTipoDeta;
    private SistemaControlInveDetaDto detaDto;
    private Integer contIndex;
    private String keyEntidad = "key.entidad.siscontrol.inve";
    private String keyDetalleEntidad = "key.entidad.siscontrol.inve.deta";
    private String tituloDetalle;

    public SistemaControlInveMBean() {
    }

    public String iniciar() {
        this.dto = null;
        this.detaDto = null;
        buscar();
        return manager.getUrlLista();
    }

    public void nuevoDetalle() {
        sessionMBean.setAccionDetalle(applicationMBean.getNuevo());
        this.tituloDetalle = recursosManager.construirTitulo(keyDetalleEntidad, sessionMBean.getAccionDetalle());
        this.detaDto = this.detaManager.inicializar();
        this.detaDto.setSistemaControlInveDto(dto);
        if (this.dto.getTodos()) {
            this.detaDto.setObligatorio(Boolean.TRUE);
        }
    }

    public String editar() {
        sessionMBean.setAccion(applicationMBean.getEditar());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));
        this.detaDto = this.detaManager.inicializar();
        try {
            this.dto = manager.obtenerPorId(this.dto.getId());
            obtenerDetallesPorEmpresa();
        } catch (DAOException ex) {
            showError(ex.getMessage());
            logger.error(ex);
        }
        return manager.getUrl();
    }

    public void editarDetalle() {
        this.tituloDetalle = recursosManager.construirTitulo(keyDetalleEntidad, sessionMBean.getAccionDetalle());
        sessionMBean.setAccionDetalle(applicationMBean.getEditar());
        this.detaDto = this.listaDetalles.get(contIndex.intValue());
    }

    public String ver() {
        sessionMBean.setAccion(applicationMBean.getVer());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));
        this.detaDto = this.detaManager.inicializar();
        try {
            this.dto = manager.obtenerPorId(this.dto.getId());
            obtenerDetallesPorEmpresa();
        } catch (DAOException ex) {
            showError(ex.getMessage());
            logger.error(ex);
        }
        return manager.getUrl();
    }

    public void verDetalle() {
        this.tituloDetalle = recursosManager.construirTitulo(keyDetalleEntidad, sessionMBean.getAccionDetalle());
        sessionMBean.setAccionDetalle(applicationMBean.getVer());
        this.detaDto = this.listaDetalles.get(contIndex.intValue());
    }

    public void obtenerDetallesPorEmpresa() {
        try {
            this.listaDetalles = detaManager.obtenerHijosPorEmpresa(dto);
        } catch (DAOException ex) {
            showError(ex.getMessage());
            logger.error(ex);
        }
    }

    public void buscar() {
        try {
            this.lista = this.manager.obtenerPorEmpresa();
        } catch (DAOException ex) {
            showError(ex.getMessage());
            logger.error(ex);
        }
    }

    public String guardar() {
        if (manager.guardar(this.dto, this.listaDetalles) != null) {
            this.editar();
        }
        return null;
    }

    public void guardarDetalle() {
        RequestContext context = RequestContext.getCurrentInstance();
        boolean resultado = true;

        if (sessionMBean.getAccionDetalle() == applicationMBean.getNuevo()) {
            resultado = detaManager.guardarDetalle(detaDto, listaDetalles, -1);
        } else if (sessionMBean.getAccionDetalle() == applicationMBean.getEditar()) {
            resultado = detaManager.guardarDetalle(detaDto, listaDetalles, contIndex.intValue());
        }
        obtenerDetallesPorEmpresa();
        context.addCallbackParam("CallbackParam", resultado);
    }

    public void changeTodos() {
        if (this.dto.getTodos()) {
            if (!this.listaDetalles.isEmpty()) {
                for (SistemaControlInveDetaDto hijo : this.listaDetalles) {
                    hijo.setObligatorio(Boolean.TRUE);
                }
            }
        }
    }

    public String verBitacora() {

        bitacoraManager.cargarBitacoraEntidad(manager.getIdEntidad(), this.dto.getId());
        return null;
    }

    public void eliminarDetalle() {
        try {
            this.detaDto = this.listaDetalles.get(contIndex.intValue());
            detaManager.eliminar(this.detaDto);
            obtenerDetallesPorEmpresa();
        } catch (DAOException ex) {
            showError(ex.getMessage());
            logger.error(ex);
        }
    }

    public void cargarEncargadosParaPopup(int transaccion, String estado, Long idTransaccion) {
        this.listaDetallesPopup = detaManager.cargarEncargadosParaPopup(transaccion, estado, idTransaccion);
    }

    public void conformidad(SistemaControlInveDetaDto dtoForm) {
        System.out.println("EN EL MBEAN");
        manager.conformidad(dtoForm);
    }

    public String retroceder() {
        buscar();
        return manager.getUrlLista();
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        SistemaControlInveMBean.logger = logger;
    }

    public SistemaControlInveManager getManager() {
        return manager;
    }

    public void setManager(SistemaControlInveManager manager) {
        this.manager = manager;
    }

    public BitacoraManager getBitacoraManager() {
        return bitacoraManager;
    }

    public void setBitacoraManager(BitacoraManager bitacoraManager) {
        this.bitacoraManager = bitacoraManager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public List<SistemaControlInveDto> getLista() {
        return lista;
    }

    public void setLista(List<SistemaControlInveDto> lista) {
        this.lista = lista;
    }

    public SistemaControlInveDto getDto() {
        return dto;
    }

    public void setDto(SistemaControlInveDto dto) {
        this.dto = dto;
    }

    public String getKeyEntidad() {
        return keyEntidad;
    }

    public void setKeyEntidad(String keyEntidad) {
        this.keyEntidad = keyEntidad;
    }

    public String getTituloDetalle() {
        return tituloDetalle;
    }

    public void setTituloDetalle(String tituloDetalle) {
        this.tituloDetalle = tituloDetalle;
    }

    public SistemaControlInveDetaDto getDetaDto() {
        return detaDto;
    }

    public void setDetaDto(SistemaControlInveDetaDto detaDto) {
        this.detaDto = detaDto;
    }

    public Integer getContIndex() {
        return contIndex;
    }

    public void setContIndex(Integer contIndex) {
        this.contIndex = contIndex;
    }

    public List<SistemaControlInveDetaDto> getListaDetalles() {
        return listaDetalles;
    }

    public void setListaDetalles(List<SistemaControlInveDetaDto> listaDetalles) {
        this.listaDetalles = listaDetalles;
    }

    public SelectItem[] getSiTipoDeta() {
        return manager.siTipoDeta();
    }

    public void setSiTipoDeta(SelectItem[] siTipoDeta) {
        this.siTipoDeta = siTipoDeta;
    }

    public List<SistemaControlInveDetaDto> getListaDetallesPopup() {
        return listaDetallesPopup;
    }

    public void setListaDetallesPopup(List<SistemaControlInveDetaDto> listaDetallesPopup) {
        this.listaDetallesPopup = listaDetallesPopup;
    }
}
